﻿using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Wallpaper.Models.Entities;

namespace Wallpaper.Data.Base
{
    /// <summary>
    /// 通用数据访问层接口
    /// </summary>
    /// <typeparam name="T">实体类型，必须继承BaseEntity</typeparam>
    public interface IBaseDal<T> where T : BaseEntity
    {
        /// <summary>
        /// 新增实体（异步）
        /// </summary>
        Task<bool> CreateEntityAsync(T entity);

        /// <summary>
        /// 根据ID获取实体（异步）
        /// </summary>
        Task<T> GetByIdAsync(string id);

        /// <summary>
        /// 获取所有实体（异步）
        /// </summary>
        Task<List<T>> GetAllAsync();

        /// <summary>
        /// 更新实体（异步）
        /// </summary>
        Task<bool> UpdateEntityAsync(T entity);

        /// <summary>
        /// 删除实体（异步）
        /// </summary>
        Task<bool> DeleteEntityAsync(T entity);

        /// <summary>
        /// 根据ID删除实体（异步）
        /// </summary>
        Task<bool> DeleteByIdAsync(string id);

        /// <summary>
        /// 获取查询对象（用于复杂查询）
        /// </summary>
        IQueryable<T> GetQueryable();

        /// <summary>
        /// 获取DbSet（用于特殊操作）
        /// </summary>
        DbSet<T> GetDbSet<T>() where T : class;
    }
}
